﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using ERPStore.Web.Html;

namespace ERPStore.Exporter.Reporting.Models
{
    public class CartItemReport
    {
        private ERPStore.Models.CartItem m_CartItem;

        public CartItemReport(ERPStore.Models.CartItem inner)
        {
            this.m_CartItem = inner;
        }

        /// <summary>
        /// Identifiant interne de la ligne
        /// </summary>
        /// <value>The id.</value>
        public int Id
        {
            get
            {
                return m_CartItem.Id;
            }
        }

        /// <summary>
        /// La quantité
        /// </summary>
        /// <value>The quantity.</value>
        public int Quantity
        {
            get
            {
                return m_CartItem.Quantity;
            }
        }

        /// <summary>
        /// Prix de vente public
        /// </summary>
        /// <value>The catalog price.</value>
        public decimal CatalogPrice
        {
            get
            {
                return m_CartItem.CatalogPrice.Value;
            }
        }

        /// <summary>
        /// Le prix de vente 
        /// </summary>
        /// <value>The sale price.</value>
        public decimal SalePrice
        {
            get
            {
                return m_CartItem.SalePrice.Value;
            }
        }


		public string OfferName 
		{
			get
			{
				return m_CartItem.OfferName;
			}
		}

        /// <summary>
        /// Unité de vente
        /// </summary>
        /// <value>The sale unit value.</value>
        public int SaleUnitValue
        {
            get
            {
                return m_CartItem.SaleUnitValue;
            }
        }

        /// <summary>
        /// Packaging
        /// </summary>
        /// <value>The packaging.</value>
        public int Packaging
        {
            get
            {
                return m_CartItem.Packaging;
            }
        }

        ///// <summary>
        ///// TVA par defaut
        ///// </summary>
        ///// <value>The default tax rate.</value>
        //public double DefaultTaxRate { get; set; }
        /// <summary>
        /// Montant de l'eco taxe
        /// </summary>
        /// <remarks>
        /// s'il n'y a pas d'eco taxe sur le produit cette valeur est nulle
        /// </remarks>
        /// <value>The recycle price.</value>
        public decimal RecyclePrice
        {
            get
            {
                return m_CartItem.RecyclePrice.Value;
            }
        }

        /// <summary>
        /// Raison de la remise via un coupon
        /// </summary>
        /// <value>The coupon reason.</value>
        public string CouponReason
        {
            get
            {
                return m_CartItem.CouponReason;
            }
        }


        /// <summary>
        /// Informations sur le stock
        /// </summary>
        /// <value>The product stock info.</value>
        public string ProductStockInfo
        {
            get
            {
                return m_CartItem.ProductStockInfo.Disponibility;
            }
        }

        /// <summary>
        /// Type de livraison
        /// </summary>
        /// <value>The shipping type id.</value>
        public string ShippingType
        {
            get
            {
                return m_CartItem.ShippingType.ToString();
            }
        }


        /// <summary>
        /// Remise appliquée au prix catalogue
        /// </summary>
        /// <value>The discount.</value>
        public double Discount
        {
            get
            {
                return m_CartItem.Discount;
            }
        }


        /// <summary>
        /// Date de création de la ligne
        /// </summary>
        /// <value>The creation date.</value>
        public DateTime CreationDate
        {
            get
            {
                return m_CartItem.CreationDate;
            }
        }


        /// <summary>
        /// Date de la dernière mise à jour de la ligne
        /// </summary>
        /// <value>The last update.</value>
        public DateTime LastUpdate
        {
            get
            {
                return m_CartItem.LastUpdate;
            }
        }


        /// <summary>
        /// Accèpte les livraisons partielles de la ligne si la quantité est un multiple supérieur au packaging
        /// </summary>
        /// <value>
        /// 	<c>true</c> if [allow partial delivery]; otherwise, <c>false</c>.
        /// </value>
        public bool AllowPartialDelivery
        {
            get
            {
                return m_CartItem.AllowPartialDelivery;
            }
        }


        #region Totals

        /// <summary>
        /// Montant total HT de l'eco taxe
        /// </summary>
        /// <value>The recycle total.</value>
        public decimal RecycleTotal
        {
            get
            {
                return m_CartItem.RecycleTotal;
            }
        }
        /// <summary>
        /// Montant de la tva de l'eco taxe
        /// </summary>
        /// <value>The recycle tax total.</value>
        public decimal RecycleTaxTotal
        {
            get
            {
                return m_CartItem.RecycleTaxTotal;
            }
        }
        /// <summary>
        /// Montant total TTC de l'eco taxe
        /// </summary>
        /// <value>The recycle total with tax.</value>
        public decimal RecycleTotalWithTax
        {
            get
            {
                return m_CartItem.RecycleTotalWithTax;
            }
        }
        /// <summary>
        /// Montant total de la ligne HT hors eco taxe
        /// </summary>
        /// <value>The total.</value>
        public decimal Total
        {
            get
            {
                return m_CartItem.Total;
            }
        }

        /// <summary>
        /// Montant total de la tva de la ligne hors eco taxe
        /// </summary>
        /// <value>The total tax.</value>
        public decimal TotalTax
        {
            get
            {
                return m_CartItem.TotalTax;
            }
        }

        /// <summary>
        /// Montant total ttc de la ligne hors eco taxe
        /// </summary>
        /// <value>The total with tax.</value>
        public decimal TotalWithTax
        {
            get
            {
                return m_CartItem.TotalWithTax;
            }
        }

        /// <summary>
        /// Montant total ht de la ligne, y compris l'eco taxe
        /// </summary>
        /// <value>The grand total.</value>
        public decimal GrandTotal
        {
            get
            {
                return m_CartItem.GrandTotal;
            }
        }

        /// <summary>
        /// Montant total de la tva , y compris l'eco taxe
        /// </summary>
        /// <value>The grand tax total.</value>
        public decimal GrandTaxTotal
        {
            get
            {
                return m_CartItem.GrandTaxTotal;
            }
        }

        /// <summary>
        /// Montant total ttc de la ligne, y compris l'eco taxe
        /// </summary>
        /// <value>The grand total with tax.</value>
        public decimal GrandTotalWithTax
        {
            get
            {
                return m_CartItem.GrandTotalWithTax;
            }
        }

        #endregion

        public string ProductCode
        {
            get
            {
                return m_CartItem.Product.Code;
            }
        }

        public string ProductTitle
        {
            get
            {
                return m_CartItem.Product.Title;
            }
        }

        public string ProductImageUrl { get ; set ; }

        public string ProductUrl { get; set; }

        public string GetProductImageUrl()
        {
            if (m_CartItem.Product.DefaultImage != null)
            {
                return m_CartItem.Product.DefaultImage.Url;
            }
            return null;
        }

        public string GetProductUrl()
        {
            return m_CartItem.Product.Link;
        }

        public bool ShowRecycle
        {
            get
            {
                return RecycleTotal == 0;
            }
        }

		public bool ShowStrikedPrice
		{
			get
			{
				return m_CartItem.CatalogPrice.Value != m_CartItem.SalePrice.Value;
			}
		}

		public bool HideStrikedPrice
		{
			get
			{
				return m_CartItem.CatalogPrice.Value == m_CartItem.SalePrice.Value;
			}
		}

    }
}
